/**
 * Copyright (C), 2022-2025, www.bosssof.com.cn
 * @FileName UserApi.java
 * @Author hantianbing
 * @Date 2022-9-28  20:56
 * @Description 文件定义了用户管理界面的接口，主要包括用户增改查以及用户角色分配等
 * History:
 * <author> hantianbing
 * <time> 2022-12-9
 * <version> 1.0.0
 * <desc> 文件定义了用户管理界面的接口，主要包括用户增改查以及用户角色分配等
 */
package com.sd365.permission.centre.api;
import com.sd365.common.log.api.annotation.ApiLog;
import com.sd365.permission.centre.entity.Department;
import com.sd365.permission.centre.entity.Position;
import com.sd365.permission.centre.entity.Role;
import com.sd365.permission.centre.entity.User;
import com.sd365.permission.centre.pojo.dto.UserDTO;
import com.sd365.permission.centre.pojo.query.UserQuery;
import com.sd365.permission.centre.pojo.vo.ResourceVO;

import com.sd365.permission.centre.pojo.vo.UserVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;
import java.util.List;
/**
 * @author hantianbing
 * @version 1.0.0
 * @class UserApi
 * @classdesc 用户管理接口 主要是包含增删改查以及对用户分配角色
 * @date 2022/12/9
 */
@CrossOrigin
@Api(tags = "用户管理 ", value = "/permission/centre/v1/user")
@RequestMapping(value = "/permission/centre/v1/user")
public interface UserApi {

    /***
     * @Description 获得用户的角色资源
     * @param id  用户id
     * @return java.util.List<com.sd365.permission.centre.pojo.vo.ResourceVO>
     * @Date 2022/12/29 13:37
     * @Author hantianbing
     **/
    @ApiOperation(tags = "获得用户的角色资源", value = "")
    @GetMapping(value = "/getUserResource")
    @ResponseBody
    List<ResourceVO> getUserResourceVO(Long id);


    /***
     * @Description 增加用户的方法
     * @param userDTO  用户信息
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:37
     * @Author hantianbing
     **/
    @ApiOperation(tags = "增加用户", value = "")
    @PostMapping(value = "")
    @ResponseBody
    Boolean add(@RequestBody @Valid UserDTO userDTO);

    
    /***
     * @Description 删除用户的方法
     * @param id    用户id
     * @param version  当前版本
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:38
     * @Author hantianbing
     **/
    @ApiOperation(tags = "删除用户", value = "")
    @DeleteMapping(value = "")
    @ResponseBody
    Boolean remove(@ApiParam(value = "当前行id", required = true) @RequestParam("id") Long id,
                   @ApiParam(value = "当前行版本", required = true) @RequestParam("version") Long version);


    /***
     * @Description 修改用户的方法
     * @param userDTO  用户信息， 名字，code，性别属性不能为空
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:38
     * @Author hantianbing
     **/
    @ApiOperation(tags = "修改用户", value = "")
    @PutMapping(value = "")
    @ResponseBody
    Boolean modify(@Valid @RequestBody UserDTO userDTO);


    /***
     * @Description 修改用户的角色信息
     * @param userDTOS  用户和角色信息， 名字，code，性别属性不能为空
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:38
     * @Author hantianbing
     **/
    @ApiOperation(tags = "修改用户角色", value = "")
    @PutMapping(value = "/modifyWithNewRole")
    @ResponseBody
    Boolean modifyWithNewRole(@Valid @RequestBody UserDTO[] userDTOS);


    /***
     * @Description 查询用户信息，可以实现多条件查询
     * @param userQuery    查询的用户的部分信息
     * @param pageSize   页大小
     * @param pageNum      页号
     * @return java.util.List<com.sd365.permission.centre.pojo.vo.UserVO>
     * @Date 2022/12/29 13:39
     * @Author hantianbing
     **/
    @ApiOperation(tags = "查询用户", value = "")
    @GetMapping(value = "")
    @ResponseBody
    List<UserVO> commonQuery(UserQuery userQuery, @RequestParam(name = "pageSize") int pageSize, @RequestParam(name = "pageNum") int pageNum);
    
    /***
     * @Description 通过用户id查询用户
     * @param id    用户id
     * @return com.sd365.permission.centre.pojo.vo.UserVO
     * @Date 2022/12/29 13:39
     * @Author hantianbing
     **/
    @ApiOperation(tags = "查询用户通过ID", value = "")
    @GetMapping(value = "{id}")
    @ResponseBody
    UserVO queryUserById(@PathVariable("id") Long id);

    /***
     * @Description 查询所有角色
     * @return java.util.List<com.sd365.permission.centre.entity.Role>
     * @Date 2022/12/29 13:40
     * @Author hantianbing
     **/
    @ApiOperation(tags = "查询所有角色", value = "")
    @GetMapping(value = "/queryAllRole")
    @ResponseBody
    List<Role> queryAllRole();

    /***
     * @Description 查询所有部门
     * @return java.util.List<com.sd365.permission.centre.entity.Department>
     * @Date 2022/12/29 13:40
     * @Author hantianbing
     **/
    @ApiOperation(tags = "查询所有部门", value = "")
    @GetMapping(value = "/queryAllDepartment")
    @ResponseBody
    List<Department> queryAllDepartment();

    /***
     * @Description 查询所有position
     * @return java.util.List<com.sd365.permission.centre.entity.Position>
     * @Date 2022/12/29 13:40
     * @Author hantianbing
     **/
    @ApiOperation(tags = "查询所有职业", value = "")
    @GetMapping(value = "/queryAllPosition")
    @ResponseBody
    List<Position> queryAllPosition();


    
    /***
     * @Description 批量修改用户
     * @param userDTOS 修改用户的信息， 名字，code，性别属性不能为空
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:41
     * @Author hantianbing
     **/
    @ApiOperation(tags = "批量修改用户", value = "")
    @PutMapping(value = "/batchUpdate")
    @ResponseBody
    Boolean batchUpdate(@Valid @RequestBody UserDTO[] userDTOS);

    /***
     * @Description 批量删除用户
     * @param userDTOS  要删除的用户的信息，名字，code，性别属性不能为空
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:42
     * @Author hantianbing
     **/
    @ApiOperation(tags = "批量删除用户", value = "")
    @DeleteMapping(value = "/batchDelete")
    @ResponseBody
    Boolean batchDelete(@Valid @RequestBody UserDTO[] userDTOS);

    /***
     * @Description 启用MD5加密算法
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:42
     * @Author hantianbing
     **/
    @ApiOperation(tags = "启用md5", value = "")
    @GetMapping(value = "/firstStartMd5")
    @ResponseBody
    Boolean firstStartMd5();

    /***
     * @Description TODO 更新密码
     * @param userDTO   要更新密码的用户信息 名字，code，性别属性不能为空
     * @return java.lang.Boolean
     * @Date 2022/12/29 13:47
     * @Author hantianbing
     **/
    @ApiOperation(tags = "updatePassword", value = "")
    @PutMapping(value = "/upwd")
    Boolean updatePassword(@RequestBody @Valid UserDTO userDTO);


    /***
     * @Description 找回密码
     * @param code  用户工号
     * @return com.sd365.permission.centre.entity.User
     * @Date 2022/12/29 13:47
     * @Author hantianbing
     **/
    @ApiOperation(tags = "找回密码", value = "")
    @GetMapping(value = "/getUserByCode")
    User getUser(@RequestParam(value = "code") String code);
}
